Various types of software programs store information in memory in the form of "heaps". A heap is a collection of data objects. A heap can be implemented as an array, a linked list or other appropriate data structure as will be understood by those skilled in the art.
In the well-known C programming language, two runtime library routines "malloc()" and "free()" are provided for managing data objects in memory. The runtime function malloc() is used to allocate memory for storing data objects. The runtime function free(), on the other hand, is used to free memory for data objects which are no longer being used by the program.
In most current implementations of general heap allocators, specific information about a heap object or data object needs to be encoded in the object during allocation. The information is used when the data object is subsequently released, i.e. "freed". This information typically comprises a "heap handle" and a "size" parameter. The heap handle specifies the heap for a multiple heap system and the size parameter specifies the size of the object typically in bytes. The use of fixed sized pools is a known technique for increasing the performance of an application while at the same time reducing the working set size by eliminating the overhead of internal information within each object allocation. A drawback with known fixed size pool implementations is the need for the user of the pool to provide the "pool handle" during the de-allocation of the object or alternatively to encode the handle within the object itself. For very small data objects, the required overhead is often larger than the original data object. In applications where large numbers of small objects are manipulated, significant demands will be put on the memory resources and execution performance can be affected.
One solution to the overhead problem for small objects has been to store the information outside the object itself. While this solution has been adequate for small fixed sized objects there still remains the problem of recognizing variable sized objects and fixed sized objects in a system. The problem involves the recognition in real time of objects which do not include internally stored information stored or information not specified explicitly by the user in a system having multiple heaps that process fixed and variable sized objects.